package com.it.pojo;

import com.baomidou.mybatisplus.annotation.*;
import lombok.*;

/*
 * @TableName
 * 【说明】：用于描述实体类，当数据表名称与实体类名称不一致，通过使用 @TableName("数据表字段名称") 来进行匹配、
 *         例如数据表为 t_user，实体类为user
 * 【使用】：1、加载实体类上、默认可以不加、
 *         2、如果不加，会使用实体类的名称作为表名，忽略大小写
 * 【注意】：当实体类的类名和数据库的表名不一致，
 *         通过使用注解 @TableName("数据库表名")、指定数据库的表名
 * */


/*
 * @TableId
 * 【说明】：
 *          1、当实体类的主键与数据库主键不一致时，通过使用 @TableId("数据表字段名称") 来进行匹配、
 *             例如数据库中的id为 u_id，实体类中为id
 *          2、指定插入的数据如何指定主键值、分别是AUTO、ASSIGN_ID（默认）
 *
 * 【属性】：value：设置主键值
 *         type：设置如何指定主键值，
 *               AUTO：主键自增长
 *               ASSIGN_ID：通过雪花算法，随机生成一个long类型、不重复数字
 * 【位置】：实体类的主键属性字段上
 * 【注意】：通过雪花算法生成值实体类必须使用 Long 或 String
 *                        数据表使用 bigint 或者 varchar(64)
 * */


/*
 * @TableField
 * 【说明】：用于描述非主键字段，当数据表与实体类对应的字段名称不一致时，
 *         通过使用 @TableField("数据表字段名称") 来进行匹配
 * 【属性】：
 *         value：匹配对应数据表名称
 *         exist：是否用于对应数据表中的字段
 * */

/*
 * @TableLogic
 * 【说明】：该注解放置到那个属性上，表示该属性为逻辑删除
 *         当删除时，会自动修改该列的属性值，默认 0 非逻辑删除 1 逻辑删除
 *         当查询时，会自动查询为 deleted = 0 的字段
 * */

/*
 * @Version
 * 【说明】：乐观锁的实现
 *         1、在数据库中增加version字段！
 *         2、实体类添加对应的version字段、并标记@Version注解
 *         3、在配置类中注册乐观锁插件
 *
 * */
@TableName("tb_user")  // TODO 用于描述实体类，名称对应表名称
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class User {
    /**
     * TODO 用户id
     *      @TableId()：用于描述Id
     *          value：对应表中的id字段
     *          type：IdType.AUTO 表示自增长
     *                IdType.INPUT 手动输入，自己指定
     *                IdType.ASSIGN_ID 雪花算法 （默认）
     */
    @TableId(value = "id",type = IdType.AUTO)
    private Integer id;
    /**
     * TODO 名称
     *      @TableField()：用于描述 普通字段
     *                 value：名称，对应表中字段的名称
     *                 exist=false：忽略，表示忽略该字段，表示数据库中该字段不存在，没有对应关系
     *
     */
    @TableField(value = "name")
    private String name;
    /**
     * TODO 手机号码
     */
    private String phone;
    /**
     * TODO 邮箱
     */
    private String email;
    /**
     * TODO 手机号码
     */
    private String profession;
    /**
     * TODO 专业
     */
    private Integer age;
    /**
     * TODO 性别
     */
    private Integer gender;
    /**
     * TODO 状态
     */
    private Integer status;
    /**
     * TODO 创建时间
     */
    private String createtime;
//    @Version
//    private Integer version;
}
